//
//  HomeViewController.swift
//  weibo
//
//  Created by apple on 15/12/12.
//  Copyright © 2015年 LYR. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

private let HomeCellID = "HomeCellID"

class HomeViewController: BaseTableViewController {
    
    //定义一个模型数组
    private lazy var statuses = [Status]()

    // 添加自动义下拉刷新控件
    private lazy var refreshView: WBRefreshControl = WBRefreshControl()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !userLogin {
        //  没有登录的情况下  显示访客视图
            visitorLoginView?.setupInfo("登录后，别人评论你的微博，发给你的消息，都会在这里收到通知", imageName: nil)
        
            return
        }
    
        //  如果已经登录  加载数据，显示首页
        
        //设置 tableView
        prepareTableView()
    
        //发送网络请求数据.
//        loadData()
        
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        loadData()
    }
    
    
    private func prepareTableView() {

        // 注册cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellID)
        
        // 设置预估行高
        tableView.estimatedRowHeight = 300
        
        // 设置自动计算行高(对contentView 添加约束)
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //  设置分割线的样式
       tableView.separatorStyle = .None
        
        //  添加自定义下拉刷新控件
        tableView.addSubview(refreshView)
        refreshView.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        //设置tableView的 tableFooterView
        tableView.tableFooterView = indicatorView
    
    }
    
    
   @objc private func loadData() {
       //使用viewmodel获取网络数据
       //since_id 和 max_id 是互斥条件 有且只能传一个
        var max_id: Int64 = 0
        var since_id: Int64 = 0
        
        //需要根据 小菊花是否正在转动 判断是否是上拉加载更多
        if indicatorView.isAnimating() {
          //上拉加载更多数据
            max_id = statuses.last?.id ?? 0
        
        }else {
          since_id = statuses.first?.id ?? 0
//          since_id = statuses.first?.id ?? 0
        }
        
        StatusListViewModel.loadHomePageData(since_id, max_id: max_id) { (statuses) -> () in
            
            // 网络加载结束   关闭动画
            self.refreshView.endRefreshing()
    
            guard let list = statuses else {
            
               return
           }
            
            if since_id > 0 {
            //  下拉刷新  新数据的操作  执行添加数据的操作
              self.statuses = list + self.statuses
            
            }else if max_id > 0 {
              //  上拉加载更多数据
            self.statuses += list
            //  数加载完毕之后  应该结束动画   不然只能多加载一页数据
                self.indicatorView.stopAnimating()
            
            } else {
              //首次加载
                self.statuses = list
            
            }
            
            //  刷新数据
            self.tableView.reloadData()
        }
            
     }
    
    private lazy var indicatorView: UIActivityIndicatorView = {
    
        let i = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
        
        //开始动画
        return i
    
    }()
    
}

//MARK:  tableView  数据源方法
extension HomeViewController {
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
//        print(statuses.count)
        return statuses.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellID, forIndexPath: indexPath) as! StatusCell
        
//        cell.textLabel?.text = statuses[indexPath.item].user?.name
        
        cell.status = statuses[indexPath.row]
        
        // 配图视图的图片数量 
//        print(statuses[indexPath.row].imageURLs!.count)
        // 转发微博的正文
//        print(statuses[indexPath.row].retweeted_status?.text)
        
        if !indicatorView.isAnimating() && indexPath.row == statuses.count - 1 {
            //滑到最后一行并且 小菊花 没有转动的情况下  自动加载数据
            //在加载数据之前 转动小菊花
        indicatorView.startAnimating()
        
            loadData()
            
        }
        return cell
    }
}














